﻿package com.conf
{
	import flash.events.MouseEvent;
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////
	// PlayerSpec :
	// fichier de configuration global des paramètres de l'application
	/////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	public class PlayerSpec
	{	
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// CONVENTION DE NOMMAGE : DONNEES DU XML -> SKIN
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// référence au conteneur racine
		public static const ROOT_CONTAINER					: String = "interfaceContainer";
		
		// référence au conteneur global
		public static const CONTAINER_GLOBAL				: String = "backgroundContainer";
		
		// nom donné aux noeuds dans le xml
		public static const NODE_WIDGET						: String = "widgetnode";
		public static const NODE_COMPONENT					: String = "componentnode";
		public static const NODE_ELEMENT					: String = "elementnode";
		
		// nom donné aux attributs dans le xml
		public static const ATTRIBUTE_NAME_WIDGET			: String = "widgetName";
		public static const ATTRIBUTE_NAME_COMPONENT		: String = "componentName";
		public static const ATTRIBUTE_NAME_ELEMENT			: String = "elementName";
		
		// nom donné aux attributs dans les noeuds du xml / aux propriétés du Model
		public static const ATTRIBUTE_WIDTH					: String = "skinWidth";
		public static const ATTRIBUTE_HEIGHT				: String = "skinHeight";
		public static const ATTRIBUTE_X						: String = "skinX";
		public static const ATTRIBUTE_Y						: String = "skinY";
		public static const ATTRIBUTE_URL					: String = "skinUrl";
		
		// nom donné aux attributs aux propriétés du Model
		// propriétés de base
		public static const PROPERTY_NAME					: String = "skinName";
		public static const PROPERTY_TYPE					: String = "skinType";
		public static const PROPERTY_PARENT					: String = "skinParent";
		public static const PROPERTY_ORDER					: String = "skinOrder";
		// propriétés de layout
		public static const PROPERTY_WIDTH					: String = "skinWidth";
		public static const PROPERTY_HEIGHT					: String = "skinHeight";
		public static const PROPERTY_X						: String = "skinX";
		public static const PROPERTY_Y						: String = "skinY";
		// propriété de chargement (url source)
		public static const PROPERTY_URL					: String = "skinSourceURL";
		// nom donné dans le code au SkinLoader de chaque graphique
		public static const PROPERTY_LOADER					: String = "skinLoader";
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// CONVENTION DE NOMMAGE : DONNEES DU XML -> SONGLIST
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		public static const NODE_SONG						: String = "song";
		public static const ATTRIBUTE_URL_SONG				: String = "source";
		public static const ATTRIBUTE_TYPE_SONG				: String = "type";
		
		public static const PROPERTY_URL_SONG				: String = "songSourceURL";
		public static const PROPERTY_TYPE_SONG				: String = "songType";
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// CONVENTION DE NOMMAGE 	DES GRAPHIQUES (Cf document de spécifications techniques)
		//							DES COMPOSANTS DANS LE CODE DU PLAYER
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// le nom de l'image de fond globale
		public static const IMG_BACKGROUND					: String = "spBg";
		
		// les différents types d'image de fond des composants
		public static const IMG_LECTURE						: String = "spLecture";
		public static const IMG_SONGLIST					: String = "spSongList";
		
		// les différents types d'image de fond des scrollbars utilisées dans les composants
		public static const SCB_SONGLIST					: String = "scbSongList";
		public static const SCB_EQUALIZER					: String = "scbEqualizer";
		
		// les types de widgets spécifiques
		public static const WDG_BUTTONBAR					: String = "buttonBar";
		public static const WDG_BACKGROUNDCONTAINER			: String = "backgroundContainer";
		
		// le conteneur de l'image de la scène
		public static const IMG_SCENE						: String = "sceneBg";
		// les différents types de bouton
		public static const BTN_PLAY						: String = "btnPlay";
		public static const BTN_PAUSE						: String = "btnPause";
		public static const BTN_STOP						: String = "btnStop";
		public static const BTN_PREVIOUS					: String = "btnPrevious";
		public static const BTN_NEXT						: String = "btnNext";
		public static const BTN_SHUFFLE						: String = "btnShuffle";
		// TODO : implement new components
		public static const BTN_REPEAT						: String = "btnRepeat";
		public static const BTN_EQUALIZER					: String = "btnEqualizer";
		
		// les différents types de curseur
		public static const PTR_SONGLIST_POINTER			: String = "ptrSongList";
		public static const PTR_LECTURE_POINTER				: String = "ptrLecture";
		public static const PTR_EQUALIZER_POINTER			: String = "ptrEqualizer";
		
		// suffixe indiquant de l'état du bouton / du curseur
		public static const PTR_THREE_STATES				: Array =	[
																			"upState",
																			"overState",
																			"downState"
																		];
		public static const BTN_FOUR_STATES					: Array =	[
																			"upState",
																			"overState",
																			"downState",
																			"hitTestState"
																		];
		public static const SUFFIX_STATE					: String = "State";
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// EVENEMENTS UTILISES PAR LES COMPOSANTS
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// écouteurs pour ces états de bouton / curseur
		public static const PTR_FOUR_EVENTS					: Array = 	[	
																			MouseEvent.MOUSE_UP,
																			MouseEvent.MOUSE_DOWN,																	
																			MouseEvent.MOUSE_OVER,
																			MouseEvent.MOUSE_OUT
																		];		
		public static const BTN_FIVE_EVENTS					: Array =	[	
																			MouseEvent.MOUSE_UP,
																			MouseEvent.MOUSE_DOWN,																	
																			MouseEvent.MOUSE_OVER,
																			MouseEvent.MOUSE_OUT,
																			MouseEvent.CLICK
																		];
		// event propre aux widgets typés en MouseEvent
		public static const WIDGET_BUTTON_STATE_CHANGE_UP	: String = "widgetButtonStateChangeUp";
		public static const WIDGET_BUTTON_STATE_CHANGE_HIT_TEST	: String = "widgetButtonStateChangeHitTest";
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// FORMATS DISPONIBLES DANS L'APPLICATION
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		///////// fichiers utilisés pour la skin
		public static const PNG_FORMAT						: String = ".png";
		// TODO : implement new formats -> jpg & swf
		public static const JPG_FORMAT						: String = ".jpg";
		public static const SWF_FORMAT						: String = ".swf";
		///////// fichiers audio
		public static const MP3_FORMAT						: String = ".mp3";
		///////// fichiers de données
		public static const XML_FORMAT						: String = ".xml";
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// LOCALISATION FICHIERS DE SKIN
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// emplacement de toutes les skins
		public static const SKIN_REPOSITORY					: String = "assets/";
		// emplacement des images dans les dossiers de skin
		public static const IMG_REPOSITORY					: String = "imgs/";
		// skin par défaut (indique à la fois le dossier & le nom du xml)
		public static const INDEX_DEFAULT_SKIN				: uint = 0;
		// liste de toutes les skins dispo
		public static const AVAILABLE_SKINS					: Array	 = [
																		{name:"skin par défaut",location:"default"},
																		{name:"skin Christophe",location:"skin_dream"},
																		{name:"skin DemonOne",location:"skin_demon"}
																		];	
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// LOCALISATION FICHIERS DE MUSIQUE / DUREE DU CHARGEMENT
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// emplacement de la liste de lecture
		public static const SONGLIST_REPOSITORY				: String = "songlists/";
		// nom du fichier de liste de lecture
		public static const SONGLIST_FILE					: String = "songlist";
		// nombre d'octet minimum à précharger avant d'autoriser la lecture d'un son
		public static const SONG_BUFFER_FILESIZE			: Number = 400000;
		public static const SONG_BUFFER_MILLISECONDS		: Number = 20000;
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// TYPE D'EVENEMENTS A EMETTRE (XML)
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// typeToDispatch : type d'événements à dispatcher au chargement d'un XML
		// selon que ce sont des infos relatives à une skin du player ou à une liste de musiques
		public static const DISPATCH_SKIN_EVENT_TYPE		: String = "skin";
		public static const DISPATCH_SONGLIST_EVENT_TYPE	: String = "songlist";
	}
}